home *** CD-ROM | disk | FTP | other *** search
- /*
- RGB to HSV 変換関数 v1.02
- おこめ
-
- col:15bitGRB
- ret h:(0,1535) s,v:(0,255)
-
- 参考:Oh!FM 1989.9 特集
- 爆走!! 趣味のC言語ライブラリ
- Part 6 あれやこれやの
- MISCライブラリ 歩野零一
- */
-
- void c32toHSV( int col, int *hh, int *ss, int *vv )
- {
- int r,g,b,rr,gg,bb, x,h,s,v,t ;
- /* 32k colors */
- r = ((col >> 2) & 0xf8); /* r = (r!=0) ? (r+7) : 0; */
- g = ((col >> 7) & 0xf8); /* g = (g!=0) ? (g+7) : 0; */
- b = ((col << 3) & 0xf8); /* b = (b!=0) ? (b+7) : 0; */
- /* full color */
- /* r = (col >> 8) & 0xff;
- g = (col >> 16) & 0xff;
- b = col & 0xff; */
-
- v = _max( r, g, b );
- x = _min( r, g, b );
- t = v - x ;
- if ( v != 0 )
- s = t *255 /v ;
- else
- s = 0 ;
- if ( t != 0 ) {
- rr = ( v - r ) *255 /t ;
- gg = ( v - g ) *255 /t ;
- bb = ( v - b ) *255 /t ;
- } else {
- rr = gg = bb = 0 ;
- }
-
- if ( r == v )
- {
- if ( b == x )
- h = 256 - gg ;
- else
- h = 1280 + bb ;
- } else {
- if ( g == v )
- {
- if ( b == x )
- h = 256 + rr ;
- else
- h = 768 - bb ;
- } else {
- if ( r == x )
- h = 768 + gg ;
- else
- h = 1280 - rr ;
- }
- }
- *hh = ((t!=0) ? h : *hh) % 1536;
- *ss = s;
- *vv = v;
- }
-